package com.nuanshui.heatedloan.middleware.rabbitmq;

import com.alibaba.fastjson.JSON;
import com.nuanshui.framework.utils.serializer.SerializationUtils;
import com.nuanshui.heatedloan.middleware.rabbitmq.message.RabbitmqCommonMessage;
import com.nuanshui.heatedloan.middleware.rabbitmq.message.RabbitmqMessage;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.io.IOException;

/**
 * rabbitmq消息的发送服务
 * 
 * @author GH
 *
 */
@Component
public class RabbitmqMessageSender {

	@Autowired
	private AmqpTemplate amqpTemplate;

	@Value("${mq.message.suffix}")
	private String suffix = "";

	/**
	 * 发送消息
	 *
	 * @param
	 * @author guohao
	 * @date 2016年3月1日 下午2:42:53
	 */
	public void send(RabbitmqMessage rabbitmqMessage) {

		  if(rabbitmqMessage instanceof RabbitmqCommonMessage) {//如果事common消息
			  RabbitmqCommonMessage commonMessage = (RabbitmqCommonMessage) rabbitmqMessage;
			  amqpTemplate.convertAndSend("topicExchange",commonMessage.getType().getCode()+commonMessage.getQueue(),commonMessage.getBody());
		  }else {
			  amqpTemplate.convertAndSend("directExchange",rabbitmqMessage.getQueue(),rabbitmqMessage.getBody());
		  }
	}
	
	/**
	 * 发送消息
	 * @param @param queue 消息的队列名
	 * @param @param params 要发送消息的参数
	 * @author guohao
	 * @date 2017年2月10日 上午10:52:11
	 * @since $
	 */
	public void send(String queue,Object params) {
		RabbitmqMessage rabbitmqMessage = new RabbitmqMessage();
		rabbitmqMessage.setBody(JSON.toJSONString(params));
		rabbitmqMessage.setQueue(queue);
		this.send(rabbitmqMessage);
	}

	public void sendObjMsg(String queue,Object params) {
		RabbitmqMessage rabbitmqMessage = new RabbitmqMessage();
		RabbitmqMessage bodyMsg = new RabbitmqMessage();
		bodyMsg.setBody(params);
		bodyMsg.setBodyType(params.getClass().getName());
		rabbitmqMessage.setQueue(queue);
		rabbitmqMessage.setBody(JSON.toJSONString(bodyMsg));
		this.send(rabbitmqMessage);
	}

	public void send(String queue,String json) {
		RabbitmqMessage rabbitmqMessage = new RabbitmqMessage();
		rabbitmqMessage.setBody(json);

		rabbitmqMessage.setQueue(queue);
		this.send(rabbitmqMessage);
	}
	
	/**
	 * 发送消息
	 * @param @param queue 消息的队列名
	 * @param @param params 要发送消息的参数
	 * @param @param isJson 是否进行json序列化 如果为false记性二进制序列化 （对于大对象尽量采用二进制序列化）
	 * @author guohao
	 * @date 2017年2月10日 上午10:52:11
	 * @since $
	 */
	public void send(String queue,Object params,boolean isJson) {
		RabbitmqMessage rabbitmqMessage = new RabbitmqMessage();
		rabbitmqMessage.setQueue(queue);
		if(isJson) {
			rabbitmqMessage.setBody(JSON.toJSONString(params));
		}else {
			try {
				rabbitmqMessage.setBody(SerializationUtils.serialize(params));
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		this.send(rabbitmqMessage);
	}
	

	
	public static void main(String[] args) {
		
	}
}
